/*******************************************************************************
  * 文件：DevRun.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2024.09.11
  * 说明：设备运行-UI navigaiton
*******************************************************************************/
#ifndef _DEV_RUN_H
#define _DEV_RUN_H

/* 头文件 *********************************************************************/
#include "Typedefine.h"
#include "Constant.h"
#include "Macro.h"
#include "OS_Timer.h"
#include "YLDeviceCtrl.h"

/* 宏定义 *********************************************************************/
#define U8_MAX_LEVEL                ((U8) 10)       // 最大档位
#define U8_COIL_OVERHEAT_TEMPER     ((U8) 45)       // 线圈盘过热温度阈值

/* 类型定义 *******************************************************************/
typedef enum
{
    eHOB_IDLE_S1 = 0,           // 空闲_S1，'-'固显或'H'闪烁，此时炉头空闲
    eHOB_IDLE_S2,               // 空闲_S2，'U'闪烁，无锅，此时炉头不运行
    eHOB_RUNNING,               // 运行中
    eHOB_PAUSE,                 // 暂停
    eHOB_END,                   // 结束（保持三秒切换至空闲）
}HobState_te; // 炉头运行状态

typedef enum
{
    eTIMING_NONE,                // 无定时
    eTIMING_MINUTE_MINDER,      // 分钟提醒
    eTIMING_COOK_TIMER,         // 烹饪定时
}TimingType; // 定时类型

/* 变量声明 *******************************************************************/

typedef struct
{
    U8          u8CZIndex;                  // CookZone索引，0 1 2 3 对应CZ1 CZ2 CZ3 CZ4; 0xFF 无效CZ
    HobState_te eRunState[4];               // 炉头运行状态
    U8          au8Level[4];                // 炉头档位

    U8          au8TimingTime[4];           // 定时时间，单位：分钟，用于显示
    U16         au16TimingTimeS[4];         // 定时时间，单位：秒，用于倒计时
    U16         u16ContinuousRunTime[4];    // 持续工作时间
    TimingType  eTimingType;                // 定时类型
    Bool        bTimerEnable[4];            // 定时是否使能标志位
    
    Bool        bFullZoneEnable;            // FullZone使能标志位
    Bool        bPauseFlag;                 // 暂停标志位
    
    Timer_ts    asLevelBlinkTimer[4];       // 档位闪烁定时器，也作为运行定时控制器使用
    Timer_ts    sTimeBlinkTimer;            // 时间闪烁定时器
}DevRunCtrl_ts;  // 设备空闲控制

/* 函数声明 *******************************************************************/

// 定时器回调函数
void DevRun_CZ1LevelBlinkHook(void);                    // 设备运行-CZ1档位闪烁回调函数
void DevRun_CZ2LevelBlinkHook(void);                    // 设备运行-CZ2档位闪烁回调函数
void DevRun_CZ3LevelBlinkHook(void);                    // 设备运行-CZ3档位闪烁回调函数
void DevRun_CZ4LevelBlinkHook(void);                    // 设备运行-CZ4档位闪烁回调函数
void DevRun_ChildLockHook(void);                        // 设备运行-童锁回调函数

// 按键处理函数
void DevRun_SliderHandler(U8 u8Slider);                 // 设备运行-滑条处理函数
void DevRum_S1LongPressHandler(void);                   // 设备运行-S1键长按处理函数
void DevRun_HobPressHandler(U8 u8CZIndex);              // 设备运行-炉头按键处理函数
void DevRun_HobLongPressHandler(U8 u8CZIndex);              // 设备运行-炉头按键处理函数
void DevRun_AddPressHandler(Bool bBuzzer);              // 设备运行-加键处理函数
void DevRun_SubPressHandler(Bool bBuzzer);              // 设备运行-减键处理函数
void DevRun_BoostPressHandler(void);                    // 设备运行-Boost键处理函数
void DevRun_FullZonePressHandler(void);                 // 设备运行-FullZone键处理函数 
void DevRun_VaryCookPressHandler(void);                 // 设备运行-VaryCook键处理函数
void DevRun_KeepWarmPressHandler(void);                 // 设备运行-KeepWarm键处理函数
void DevRun_PausePressHandler(void);                    // 设备运行-Pause键处理函数

// 状态处理函数
Bool DevRun_CheckFullZone(void);                        // 设备运行-检查Fullzone是否使能
Bool DevRun_CheckTimingEnable(void);                    // 设备运行-检查是否有CZ使能定时
U8   DevRun_GetCZNums(void);                            // 设备运行-获取CZ数量
U8   DevRun_GetMiniTimeCZIndex(void);                   // 设备运行-获取当前倒计时数值中最低的CZ索引
U8   DevRun_GetCZIndex(void);                           // 设备运行-获取CZ的索引
Bool DevRun_CheckIsBusy(void);                          // 设备运行-检查设备是否正忙
void DevRun_Init(void);                                 // 设备运行-初始化

#endif /* _DEV_RUN_H */

/***************************** 文件结束 ***************************************/

